package math.leetcode_260;

public class XOR {
    public int[] singleNumber(int[] nums) {
        int ans1 = 0;
        for (int num : nums) {
            ans1 ^= num;
        }
        // ans = a ^ b; 两个只出现一次的元素分别为 a, b
        /*
            int rightOne = 1;
            while ((ans1 & rightOne) == 0) {
                rightOne <<= 1;
            }
        */
        int rightOne = ans1 & (~ans1 + 1);
        int ans2 = 0;
        for (int num : nums) {
            // 如果 & 运算的结果不为 0，说明 num 在 rightOne 那一位是 1
            if ((num & rightOne) != 0) {
                ans2 ^= num;
            }
        }
        return new int[] {ans2, ans2 ^ ans1};
    }
}
